home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / quicktime / quicktime for java / imagecompositing / src / imagecompositing.java < prev    next >
Encoding:
Java Source  |  2000-06-23  |  6.0 KB  |  196 lines

  1. /*
  2.  * QuickTime for Java SDK Sample Code
  3.  
  4.    Usage subject to restrictions in SDK License Agreement
  5.  * Copyright: © 1996-1999 Apple Computer, Inc.
  6.  
  7.  */
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import java.awt.image.*;
  11. import java.io.*;
  12.  
  13. import quicktime.qd.*;
  14. import quicktime.*;
  15. import quicktime.std.StdQTConstants;
  16. import quicktime.std.image.*;
  17. import quicktime.std.movies.*;
  18. import quicktime.io.*;
  19. import quicktime.util.*;
  20.  
  21. import quicktime.app.QTFactory;
  22. import quicktime.app.actions.*;
  23. import quicktime.app.display.*;
  24. import quicktime.app.image.*;
  25. import quicktime.app.players.*;
  26. import quicktime.std.image.GraphicsMode;
  27. import quicktime.app.anim.*;
  28.  
  29. public class ImageCompositing extends Frame implements QDConstants, StdQTConstants, Errors, Runnable {        
  30.     public static ImageCompositing pm;
  31.     
  32.     private static boolean profiling = true;
  33.     private Thread profileThread;
  34.     private Compositor comp;
  35.  
  36.     public static void main (String args[]) {
  37.         try {
  38.             QTSession.open();
  39.             pm = new ImageCompositing("QT in Java");
  40.             pm.pack();
  41.             pm.show();
  42.             pm.toFront();
  43.             
  44.             if (profiling) {
  45.                 pm.profileThread = new Thread(pm);
  46.                 pm.profileThread.start();
  47.             }
  48.         } catch (Exception e) {
  49.             e.printStackTrace();
  50.             QTSession.close();
  51.         }
  52.     }
  53.     
  54. //only used if profiling
  55.     public void run () {
  56.         comp.resetStatistics();
  57.         for (;;) {
  58.             try {
  59.                 Thread.sleep (5000);
  60.             } catch (Exception e) {}
  61.             
  62.             float stat = comp.getStatistics();
  63.             if (stat != 0)
  64.                 System.out.println ("Frames a second:" + stat);
  65.             comp.resetStatistics();
  66.         }
  67.     }
  68.             
  69.     ImageCompositing (String title) throws Exception {
  70.         super (title);
  71.         QTCanvas myQTCanvas = new QTCanvas(QTCanvas.kPerformanceResize, 0.5f, 0.5f);
  72.         add("Center", myQTCanvas);
  73.         
  74.         addWindowListener(new WindowAdapter () {
  75.             public void windowClosing (WindowEvent e) {
  76.                 // cleanup profile thread if profiling
  77.                 if (profileThread != null)
  78.                     profileThread.stop();
  79.                     
  80.                 QTSession.close();
  81.                 dispose();
  82.             }
  83.             public void windowClosed (WindowEvent e) { 
  84.                 System.exit(0);
  85.             }
  86.         });
  87.  
  88.  
  89.         QDGraphics gw = new QDGraphics (new QDRect(340, 240));
  90.         if (profiling)
  91.             comp = new ProfileCompositor (gw, QDColor.lightGray, 10, 1);    
  92.         else
  93.             comp = new Compositor (gw, QDColor.lightGray, 10, 1);    
  94.             
  95.         myQTCanvas.setClient (comp, true);
  96.         setupCompositor (comp);
  97.     }
  98.     
  99.     
  100.     private void setupCompositor (Compositor comp) throws Exception {
  101.         JavaTextDrawer jtDrawer = new JavaTextDrawer (new JavaText(), new Dimension (150, 38), true);
  102.             // apply a tinge of pink to the java text that is drawn
  103.         jtDrawer.setGraphicsMode (new GraphicsMode (blend, QDColor.gray));        
  104.         comp.addMember (jtDrawer, 1);
  105.         
  106.         Compositor sh = new Compositor (new QDGraphics (new QDRect(200, 200)), 
  107.                                                     /*new QDColor(0xDFFF, 0xDFFF, 0xFFFF)*/QDColor.white, 20, 1); 
  108.         addSprites (sh);
  109.         sh.setLocation (10, 10);
  110.         sh.getTimer().setRate(1);
  111.         comp.addMember (sh, 3);
  112.         
  113.         Movie m = makeMovie (new QTFile (QTFactory.findAbsolutePath ("jumps.mov")));
  114.         MoviePresenter md = new MoviePresenter (m);
  115.         md.setLocation (120, 120);
  116.         md.setGraphicsMode (new GraphicsMode (blend, QDColor.magenta));
  117.         md.setRate(1);
  118.         comp.addMember (md, 2);
  119.         
  120.         ImagePresenter id = makeImagePresenter (new QTFile (QTFactory.findAbsolutePath ("pics/house.jpg")),
  121.                                 new QDRect (100, 100));
  122.         id.setLocation (20, 20);
  123.         id.setGraphicsMode (new GraphicsMode (blend, QDColor.yellow));
  124.         comp.addMember (id, 2);
  125.  
  126.         Dragger dragger = new Dragger (MouseResponder.kNoModifiersMask);
  127.         SWController controller2 = null;
  128.         if (profiling)
  129.             controller2 = new ProfileSWController (dragger, true);
  130.         else
  131.             controller2 = new SWController (dragger, true);
  132.             
  133.         comp.addController (controller2);
  134.  
  135.         LayerChanger lc = new LayerChanger (InputEvent.ALT_MASK);
  136.         SWController controller3 = new SWController (lc, true);
  137.         comp.addController (controller3);
  138.         
  139.         SimpleActionList al2 = new SimpleActionList ();
  140.         al2.addMember (new BounceAction (2, 1, comp, comp.getTransformable(jtDrawer), 1, 1));
  141.         al2.addMember (new BounceAction (10, 1, comp, comp.getTransformable(id), 1, 1));
  142.         al2.addMember (new BounceAction (10, 1, comp, comp.getTransformable(md), -1, -1));
  143.         comp.addController (al2);
  144.             
  145.         comp.getTimer().setRate(1);
  146.         
  147.         ControlPanel cp = new ControlPanel(comp, jtDrawer);
  148.         add("North", cp);        
  149.         cp.setDisplay();
  150.     }
  151.     
  152.     private Movie makeMovie (QTFile f) throws IOException, QTException {
  153.         OpenMovieFile movieFile = OpenMovieFile.asRead(f);
  154.         Movie m = Movie.fromFile (movieFile);
  155.         m.getTimeBase().setFlags (loopTimeBase);    
  156.         return m;
  157.     }
  158.     
  159.     private ImagePresenter makeImagePresenter (QTFile file, QDRect size) throws Exception {
  160.         GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (file);
  161.         if1.setDisplayBounds (size);
  162.         return ImagePresenter.fromGraphicsImporterDrawer (if1);
  163.     }
  164.  
  165.     void addSprites (Compositor sd) throws IOException, QTException {
  166.         File matchFile = QTFactory.findAbsolutePath ("images/Ship01.pct");    //this file must exist in the directory!!!    
  167.         ImageDataSequence isp = ImageUtil.createSequence (matchFile);
  168.         ImageDataSequence seq = ImageUtil.makeTransparent (isp, QDColor.blue);
  169.         
  170.         Matrix matrix1 = new Matrix();
  171.         matrix1.setTx(20);
  172.         matrix1.setTy(20);
  173.         matrix1.setSx(0.8F);
  174.         matrix1.setSy(0.8F);
  175.         TwoDSprite s1 = new TwoDSprite(seq, 4, matrix1, true, 1);
  176.         sd.addMember (s1);
  177.         
  178.         Matrix matrix2 = new Matrix();    
  179.         matrix2.setTx(4);
  180.         matrix2.setTy(4);
  181.         TwoDSprite s2 = new TwoDSprite(seq, 1, matrix2, true, 10);
  182.         sd.addMember (s2);
  183.  
  184.         SimpleActionList al = new SimpleActionList();
  185.         ImageSequencer is = new ImageSequencer (seq);
  186.         is.setLooping (ImageSequencer.kLoopForwards);
  187.         al.addMember (new NextImageAction (20, 1, is, s1));
  188.         al.addMember (new BounceAction (20, 1, sd, s1, 3, 2));
  189.         ImageSequencer is2 = new ImageSequencer (seq);
  190.         is2.setLooping (ImageSequencer.kLoopForwards);
  191.         al.addMember (new NextImageAction (15, 1, is2, s2));
  192.         al.addMember (new BounceAction (40, 1, sd, s2, 4, 3));
  193.         sd.addController (al);
  194.     }
  195. }
  196.